const CryptoJS = require('crypto-js');  //引用AES源码js
//解密方法有偏移量
function DecryptCBC(word,keyStr,ivStr) {
	const key = CryptoJS.enc.Utf8.parse(keyStr);  //十六位十六进制数作为密钥
	const iv = CryptoJS.enc.Utf8.parse(ivStr);   //十六位十六进制数作为密钥偏移量
	let encryptedHexStr = CryptoJS.enc.Hex.parse(word);
	let srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr);
	let decrypt = CryptoJS.AES.decrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });//CryptoJS.mode.CBC为有偏移量，CryptoJS.mode.ECB没有偏移量
	let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
	return decryptedStr.toString();
}

//加密方法有偏移量
function EncryptCBC(word,keyStr,ivStr) {
	const key = CryptoJS.enc.Utf8.parse(keyStr);  //十六位十六进制数作为密钥
	const iv = CryptoJS.enc.Utf8.parse(ivStr);   //十六位十六进制数作为密钥偏移量
	let srcs = CryptoJS.enc.Utf8.parse(word);
	let encrypted = CryptoJS.AES.encrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });//CryptoJS.mode.CBC为有偏移量，CryptoJS.mode.ECB没有偏移量
	return encrypted.ciphertext.toString().toUpperCase();
}

//解密方法无偏移量
function DecryptECB(word,keyStr) {
	var key = CryptoJS.enc.Utf8.parse(keyStr)
	var decrypt = CryptoJS.AES.decrypt(word, key, {mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7})
	return CryptoJS.enc.Utf8.stringify(decrypt).toString()
}

//加密方法无偏移量
function EncryptECB(word,keyStr) {
	let key = CryptoJS.enc.Utf8.parse(keyStr);
	let srcs = CryptoJS.enc.Utf8.parse(word);
	let encrypted = CryptoJS.AES.encrypt(srcs, key, { iv: '',mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7});//CryptoJS.mode.CBC为有偏移量，CryptoJS.mode.ECB没有偏移量
	return encrypted.toString();
}

//获取文件的SHA256哈希值传入文件的e.target.result
function fileSHA256(result){
	let wordArray = CryptoJS.lib.WordArray.create(result);
	let hash = CryptoJS.SHA256(wordArray).toString();
	return hash
}

export default {
	DecryptCBC,
	EncryptCBC,
	DecryptECB,
	EncryptECB,
	fileSHA256
}